# 编译器和编译选项
CXX = g++
CXXFLAGS = -std=c++11 -Wall -O2
LDFLAGS = 

# 目标可执行文件
TARGETS = server.elf client.elf

# 模块源文件（所有共享模块）
MODULE_SOURCES = log_manager.cpp
# 模块目标文件（自动生成）
MODULE_OBJS = $(MODULE_SOURCES:.cpp=.o)

# 标准库
STD_LIBS = -lpthread

# 其他库
OTHER_INC := $(shell pkg-config --cflags x11 xtst)
OTHER_LIB := $(shell pkg-config --libs x11 xtst)
OTHER_INC += $(shell pkg-config --cflags libjpeg)
OTHER_LIB += $(shell pkg-config --libs libjpeg)

# opencv库
have_opencv := $(shell pkg-config --exists opencv4 && echo 1)
ifeq ($(have_opencv),1)
OTHER_INC += $(shell pkg-config --cflags opencv4)
OTHER_LIB += $(shell pkg-config --libs opencv4)
else
# 把自己编译的库目录告知链接器
OTHER_INC += -I /home/whf/app/opencv-4.10.0/build/_install/include/opencv4
OTHER_LIB += -L /home/whf/app/opencv-4.10.0/build/_install/lib
OTHER_LIB += -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs
endif




# 合并所有编译和链接选项
CXXFLAGS += $(OTHER_INC)
LDFLAGS += $(OTHER_LIB) $(STD_LIBS)

# 默认目标：编译所有可执行文件
all: $(TARGETS)

# 编译server
server.elf: server.o $(MODULE_OBJS)
	@echo "OTHER_INC: $(OTHER_INC)"
	$(CXX) -o $@ $^ $(LDFLAGS)

# 编译client
client.elf: client.o $(MODULE_OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)

# 编译小测试例程
demo_test.elf: demo_test.o $(MODULE_OBJS)
	$(CXX) -o $@ $^ $(LDFLAGS)


# 生成目标文件
%.o: %.cpp
	$(CXX) $(CXXFLAGS) -c $< -o $@

# 清理编译产物
clean:
	rm -f $(TARGETS) *.o

# 伪目标
.PHONY: all clean
    